package main

import "fmt"

func main() {
	demo1()
}

// demo
// for range 修改数组
// 这里考察，for 循环的原理
// go中的for 都是copy 一份数据进行来循环的
// 所以这里的索引0 的时候改变了源值， 但是不影响循环的原值
func demo() {
	a := [3]int{1, 2, 3}
	for k, v := range a {
		if k == 0 {
			a[0], a[1] = 100, 200
			fmt.Println(a)
			// [100 200 3]

		}
		a[k] = 100 + v
	}
	fmt.Println(a)
	// [101 102 103]
}

// demo1
// 为什么，我们这里运用了 切片就可以修改掉， 但是数组缺不行。
// 因为拷贝出来的切片还是指向同个数组底层的 ， 所以当索引0 修改的时候， 已经修改到了底层数组中
// 后续打印的当然会发生变化
func demo1() {
	a := []int{1, 2, 3}
	for k, v := range a {
		if k == 0 {
			a[0], a[1] = 100, 200
			fmt.Println(a)
			// [100 200 3]

		}
		a[k] = 100 + v
	}
	fmt.Println(a)
	// [101 300 103]
}
